#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
JSON处理工具模块

提供JSON解析和文本处理功能。
"""

import json
import re
from typing import Any, Dict, List, Optional, Union

from core.utils.log import mylogger


def json_parser(text: str) -> Optional[Union[Dict[str, Any], List[Any]]]:
    """尝试从文本中提取并解析JSON

    Args:
        text: 可能包含JSON的文本

    Returns:
        Optional[Union[Dict, List]]: 解析后的JSON对象，解析失败则返回None
    """
    # 如果输入为空，直接返回None
    if not text:
        return None

    # 尝试直接解析整个文本
    try:
        return json.loads(text)
    except json.JSONDecodeError:
        mylogger.debug("直接解析JSON失败，尝试提取JSON部分")

    # 尝试从markdown代码块中提取JSON
    code_block_pattern = r"```(?:json)?\s*([\s\S]*?)\s*```"
    code_blocks = re.findall(code_block_pattern, text)

    for block in code_blocks:
        try:
            return json.loads(block)
        except json.JSONDecodeError:
            continue

    # 尝试使用正则表达式查找可能的JSON对象
    json_pattern = r"\{[\s\S]*?\}"
    json_matches = re.findall(json_pattern, text)

    for match in json_matches:
        try:
            return json.loads(match)
        except json.JSONDecodeError:
            continue

    # 尝试使用正则表达式查找可能的JSON数组
    array_pattern = r"\[[\s\S]*?\]"
    array_matches = re.findall(array_pattern, text)

    for match in array_matches:
        try:
            return json.loads(match)
        except json.JSONDecodeError:
            continue

    mylogger.error("无法从文本中提取有效的JSON")
    return None


def split_text_into_sentences(text: str) -> List[str]:
    """将文本分割成句子

    Args:
        text: 要分割的文本

    Returns:
        List[str]: 句子列表
    """
    # 使用正则表达式按句子分隔符分割文本
    sentence_delimiters = r"(?<=[.!?。！？…])"
    sentences = re.split(sentence_delimiters, text)

    # 过滤空句子并去除前后空白
    sentences = [s.strip() for s in sentences if s.strip()]

    return sentences
